package com.example.cyk.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {

    /**
     * 加密
     * @param password
     * @return
     */
    public static String encrypt(String password) {
        //1.生成 32 盐值
        String salt = UUID.randomUUID().toString().replaceAll("-", "");
        //2. (salt + 明文) 整体使用 md5 加密
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //3.约定分隔符
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    /**
     * 根据盐值加密
     * @param password
     * @return
     */
    public static String encrypt(String salt, String password) {
        //2. (salt + 明文) 整体使用 md5 加密
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //3.约定分隔符
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    /**
     * 验证密码是否正确
     * @return
     */
    public static boolean check(String inputPassword, String dbPassword)  {
        //1.格式判断
        if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(dbPassword) &&
        dbPassword.length() == 65) {
            //1) 获取盐值
            String salt = inputPassword.split("\\$")[0];
            //2) 获取同样方式加密后的密码
            String finalInputPassword = encrypt(salt, inputPassword);
            return dbPassword.equals(finalInputPassword);
        }
        return false;
    }

}
